基于Redis实现查找附近的人


redis在3.2版本之后也提供了地理位置的能力,使用redis可以轻松实现查找附近的人

geoadd命令

该命令是添加地理位置信息,基本格式是:

geoadd key log lat member
选项 含义
key redis key
log 经度
lat 纬度
member 该位置名字

举个例子:我现在要添加福州的软件园的地理位置

首先我通过某歌地图搜索到软件园,右键地点,点击“这儿有什么”,就会弹出经纬度小卡片,如图:

拿到经纬度后,redis中执行:

geoadd fuzhou 119.270673 26.114479 software_park

要注意的是,某歌地图搜出来的坐标,纬度在前,经度在后,而redis命令是相反的

如果要一次添加多个位置,直接在后面追加经纬度和member即可

geodist命令

该命令是计算两个位置的距离,为了演示效果,我再添加一个位置

geoadd fuzhou 119.268645 26.110886 taxi_company

计算software_parktaxi_company两点之间的距离:

127.0.0.1:6379> geodist fuzhou software_park taxi_company
"447.8919"

默认单位是米,同时也支持其他单位:

  • m:米
  • km:公里
  • mi:英里
  • ft:英尺

直接将单位加在命令后面即可,如:

127.0.0.1:6379> geodist fuzhou software_park taxi_company km
"0.4479"

georadius命令

该命令是找出指定坐标点一定距离内的位置,基本格式是:

georadius key log lat radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

这条命令比较长,后半部分用“[]”包裹的参数都是可选参数,非必填,可以先不看

例如,找出“119.270673 26.114479” 附近1km和400m内的点:

127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km
1) "software_park"
2) "taxi_company"

127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 400 m
1) "software_park"

后面可选参数主要是针对查询结果做一些处理:

参数 说明
WITHCOORD 返回目标位置的经纬度
WITHDIST 返回与目标位置之间具体距离
ASC|DESC 按距离排序,ASC是从近到远,DESC相反
WITHHASH 返回目标位置的hash值
COUNT count 指定返回数量

这些参数不一一演示,仅举其中三个例子:

127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km withcoord
1) 1) "software_park"
   2) 1) "119.27067071199417114"
      2) "26.11447802512430627"
2) 1) "taxi_company"
   2) 1) "119.26864296197891235"
      2) "26.11088632524153041"
      
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km withdist
1) 1) "software_park"
   2) "0.0003"
2) 1) "taxi_company"
   2) "0.4481"
   
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km count 1
1) "software_park"

到这里,相信你已经可以使用redis实现“查到附近的人”了

georadiusbymember命令

该命令同样是找出距离指定位置n米距离内的点位,与georadius的区别是:

georadius是指定坐标点来搜索,而georadiusbymember是指定member来搜索,

127.0.0.1:6379> georadiusbymember fuzhou software_park 500 m
1) "software_park"
2) "taxi_company"

geohash命令

该命令是计算某位置的hash值,基本格式如下:

geohash key member

例如:

127.0.0.1:6379> geohash fuzhou software_park
1) "wssud1frb50"

geopos命令

获取指定位置的坐标:

127.0.0.1:6379> geopos fuzhou software_park
1) 1) "119.27067071199417114"
   2) "26.11447802512430627"
文章作者: 周君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周君 !
评论